package com.jeecms.pay.util;

import com.jeecms.pay.constant.InnerExceptionEnum;
import com.jeecms.pay.exception.PayClientException;
import com.jeecms.pay.exception.PayServerException;
import com.jeecms.pay.model.PayContext;
import com.jeecms.pay.model.PayInnerExceptionEntity;

/**
 * 异常处理
 * 
 * @author web
 * 
 */
public class ExceptionUtil {

	private ExceptionUtil() {

	}

	/**
	 * 抛出服务器端异常
	 * 
	 * @param msg
	 * @param context
	 * @param innerExEnum
	 * @throws SpiderServerException
	 */
	public static void throwServerEx(String msg, PayContext context, InnerExceptionEnum innerExceptionEnum, Exception ex)
			throws PayServerException {
		PayServerException serverEx;
		StringBuilder sb = new StringBuilder();
		sb.append("出现异常：").append(msg);
		if (ex == null) {
			serverEx = new PayServerException(sb.toString());
		} else {
			serverEx = new PayServerException(sb.toString(), ex);
		}
		PayInnerExceptionEntity innerEx = new PayInnerExceptionEntity();
		innerEx.setInnerExceptionEnum(innerExceptionEnum);
		innerEx.setException(serverEx);
		context.setPayInnerExceptionEntity(innerEx);
		throw serverEx;
	}

	/**
	 * 抛出客户端异常
	 * 
	 * @param msg
	 * @param context
	 * @param innerException
	 * @throws SpiderClientException
	 */
	public static void throwClientEx(String msg, PayContext context, InnerExceptionEnum innerExceptionEnum, Exception ex)
			throws PayClientException {
		StringBuilder sb = new StringBuilder();

		PayClientException clientEx;
		if (ex == null) {
			clientEx = new PayClientException(sb.toString());
		} else {
			clientEx = new PayClientException(sb.toString(), ex);
		}

		PayInnerExceptionEntity innerEx = new PayInnerExceptionEntity();
		innerEx.setException(clientEx);
		innerEx.setInnerExceptionEnum(innerExceptionEnum);
		if (context != null) {
			context.setPayInnerExceptionEntity(innerEx);
		}
		throw clientEx;
	}

}
